{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": []
   },
   "source": [
    "# Optional Lab - Neurons and Layers\n",
    "In this lab we will explore the inner workings of neurons/units and layers. In particular, the lab will draw parallels to the models you have mastered in Course 1, the regression/linear model and the logistic model. The lab will introduce Tensorflow and demonstrate how these models are implemented in that framework.\n",
    "<figure>\n",
    "   <img src=\"../work/images/C2_W1_NeuronsAndLayers.png\"  style=\"width:540px;height:200px;\" >\n",
    "</figure>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Packages\n",
    "**Tensorflow and Keras**  \n",
    "Tensorflow is a machine learning package developed by Google. In 2019, Google integrated Keras into Tensorflow and released Tensorflow 2.0. Keras is a framework developed independently by François Chollet that creates a simple, layer-centric interface to Tensorflow. This course will be using the Keras interface. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import tensorflow as tf\n",
    "from tensorflow.keras.layers import Dense, Input\n",
    "from tensorflow.keras import Sequential\n",
    "from tensorflow.keras.losses import MeanSquaredError, BinaryCrossentropy\n",
    "from tensorflow.keras.activations import sigmoid\n",
    "from lab_utils_common import dlc\n",
    "from lab_neurons_utils import plt_prob_1d, sigmoidnp, plt_linear, plt_logistic\n",
    "plt.style.use('./deeplearning.mplstyle')\n",
    "import logging\n",
    "logging.getLogger(\"tensorflow\").setLevel(logging.ERROR)\n",
    "tf.autograph.set_verbosity(0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Neuron without activation - Regression/Linear Model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": []
   },
   "source": [
    "### DataSet\n",
    "We'll use an example from Course 1, linear regression on house prices."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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6+s3uM2Df23b2tqiurq63iuaD2/zT506dUJWVhZ+/PFH2NnZ4f3338cTTzyhtdXxSkpKAABdunTRyvHp0cAkQI8MJycnVFZWNlgnCAImT56Muro6bNmyReGtFicnJ0gkEhQUFMDBwUHhp0ePHo2ez83NDbm5uWrH6e3tjeTkZIWy/fv3y5uiDAwMMHToUIVt6urqkJycLN9m6NChEIvFCtvk5+ejoKBAvk1DOnTogMDAQCxfvhynT5/GlStXcODAAfTt2xdisVhhFbXS0lKcO3dO6bUYGBgAkL0V9U85OTkQi8VwdnZWegxq39gnQK3u5s2bmDBhAqZNmwZXV1d06tQJJ06cwPLlyxESEtLgPjExMUhKSsK+fftw+/Zt+b/+zczM0KlTJyxYsABRUVGoq6uDr68vbt26hYyMDJiamiIiIqLBYwYHB+OVV15BbW2twhquubm5qK6uRklJCSoqKuTv0A8ePBgAMHPmTKxbtw5vvfUWpk2bhgMHDmD79u1ISEiQH+P1119HREQE3N3d4enpidWrV6OyshJTp06Vx/3yyy/j9ddfh6WlJUxNTREZGQlvb28MGzaswXj/97//4dKlS/D394eFhQV2796Nuro6DBgwACYmJnj55Zfx5ptvwsrKCtbW1nj33XebXGHM2toaRkZGSExMRPfu3WFoaAgzMzMAso5zPz8/ebMQPaba+vUk0j337t0ToqOjhSFDhghmZmaCsbGxMGDAAOG9994T7ty5I98OD70i2tDrjHjoFdG6ujph9erVwoABAwSxWCx06dJFCA4OFtLS0hqNo6amRujatauQmJioUG5vb9/guR6WkpIiDB48WDAwMBD69Okjj+Nha9euFXr27CkYGBgInp6ewpEjRxTq7969K8yePVuwsLAQjI2NhfHjxwuFhYWNxnvo0CFBKpUKFhYWgpGRkeDq6ips27ZNXl9RUSFMnjxZMDY2FmxsbITly5crvCIqCIIwb948hddABUEQvv76a6FHjx6Cnp6eQt2AAQOEH3/8sdF46PHARWVIp33++eeIj49XGOj1OAkICMDgwYOxevVqtfbbs2cP3njjDZw+fRodOrDB4HHGv13Saa+++irKyspQUVEhnzqCZJ3w3333HROADuDfMOm0Dh064N13323rMB45zz77bFuHQK2EzUFERDqMr4gSEekwJgEiIh3GJEBEpMOYBIiIdBiTABGRDmMSICLSYf8fzQyXwYW/oIAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_train = np.array([[1.0], [2.0]], dtype=np.float32)           #(size in 1000 square feet)\n",
    "Y_train = np.array([[300.0], [500.0]], dtype=np.float32)       #(price in 1000s of dollars)\n",
    "\n",
    "fig, ax = plt.subplots(1,1)\n",
    "ax.scatter(X_train, Y_train, marker='x', c='r', label=\"Data Points\")\n",
    "ax.legend( fontsize='xx-large')\n",
    "ax.set_ylabel('Price (in 1000s of dollars)', fontsize='xx-large')\n",
    "ax.set_xlabel('Size (1000 sqft)', fontsize='xx-large')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Regression/Linear Model \n",
    "The function implemented by a neuron with no activation is the same as in Course 1, linear regression:\n",
    "$$ f_{\\mathbf{w},b}(x^{(i)}) = \\mathbf{w}\\cdot x^{(i)} + b \\tag{1}$$\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can define a layer with one neuron or unit and compare it to the familiar linear regression function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "linear_layer = tf.keras.layers.Dense(units=1, activation = 'linear', )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's examine the weights."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "linear_layer.get_weights()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There are no weights as the weights are not yet instantiated. Let's try the model on one example in `X_train`. This will trigger the instantiation of the weights. Note, the input to the layer must be 2-D, so we'll reshape it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tf.Tensor([[1.37]], shape=(1, 1), dtype=float32)\n"
     ]
    }
   ],
   "source": [
    "a1 = linear_layer(X_train[0].reshape(1,1))\n",
    "print(a1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The result is a tensor (another name for an array) with a shape of (1,1) or one entry.   \n",
    "Now let's look at the weights and bias. These weights are randomly initialized to small numbers and the bias defaults to being initialized to zero."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "w = [[1.37]], b=[0.]\n"
     ]
    }
   ],
   "source": [
    "w, b= linear_layer.get_weights()\n",
    "print(f\"w = {w}, b={b}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A linear regression model (1) with a single input feature will have a single weight and bias. This matches the dimensions of our `linear_layer` above.   \n",
    "\n",
    "The weights are initialized to random values so let's set them to some known values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[array([[200.]], dtype=float32), array([100.], dtype=float32)]\n"
     ]
    }
   ],
   "source": [
    "set_w = np.array([[200]])\n",
    "set_b = np.array([100])\n",
    "\n",
    "# set_weights takes a list of numpy arrays\n",
    "linear_layer.set_weights([set_w, set_b])\n",
    "print(linear_layer.get_weights())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's compare equation (1) to the layer output."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tf.Tensor([[300.]], shape=(1, 1), dtype=float32)\n",
      "[[300.]]\n"
     ]
    }
   ],
   "source": [
    "a1 = linear_layer(X_train[0].reshape(1,1))\n",
    "print(a1)\n",
    "alin = np.dot(set_w,X_train[0].reshape(1,1)) + set_b\n",
    "print(alin)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "They produce the same values!\n",
    "Now, we can use our linear layer to make predictions on our training data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction_tf = linear_layer(X_train)\n",
    "prediction_np = np.dot( X_train, set_w) + set_b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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+26+/PJLAObMmcOVK1d48MEHM6yldu3a+Pr6pjpGXFwchw4dsm+7/m+FTZs2sXTp0lRZW716dcD8VHPv3r0kJCTQqFEj+3MKFSpEtWrV0q1j48aNlC5dmqpVq2ZYb0auZnyZMmXs22rUqEFQUFCqn1f58uUpWLCg/bGyVrKDJmySPOPqvaGfffZZql/sYAbWta4dMF0d+KSkpADw1FNP0b59e+bOncvChQsZP34877zzDv369XO4lmsHoFnp6nT4u3fvZvv27TRv3pwdO3awbNkyzp49S4MGDVKF5c26vv64uDhGjRrF/fffn6avt7f3TR3Dx8fnpp53M64fINtsNvvPW0REcl7Lli1p3749Q4cOTTMvhJubG4ZhpNqWmJiYZh9Wv+uz4vf/U089xWOPPcakSZOYOnUqDz30ULZl7b333svEiRPT9C1RokS699hmRFkreY0+eZU8o3jx4pQsWZJ9+/ZRuXLlVF8VKlS4oX2VKVOGPn36MHPmTF566SU+++wzAEJDQ1m9enWqEF21ahUFCxakdOnSt1R/aGgomzZtIj4+PtW+3dzc7GdVw8LCCA4OZuzYsdSpUwd/f39atWrF8uXLWbZsWab3uwKsWbMmzePQ0NAMn1OvXj127tyZ5n2tXLkybm5uhIaGcujQoVQzQV9/nOvVqlWLFStWWP4BAuDp6UlycnKG+8jOn4eIiDjXhAkTmDNnTqpJFMGc+fbYsWOpftdn5Xrf1+ZVUlIS69evT5WLd911F35+fkyZMoX58+fTq1evTPe5adMmLl26lOoY/v7+qT69vF69evXYtm0b5cuXT5O1fn5+VKpUCQ8PDyIjI+3POXv2bIbL79WqVYvDhw+n28fRrD106FCqT423b99ObGwsNWrUyPC5IllNg1fJU0aNGsX48eN5//332bVrF1u2bGHq1Km8++67Du9jwIABLFiwgP379xMdHc3SpUvtIfbcc89x6NAh+vXrx44dO5g1axYjRozgxRdfTHWp0s3o3r073t7e9OjRg61bt7J06VL69evHY489RvHixQHzLGbLli357rvv7APVWrVqceXKFRYvXkxERESmx1m1ahVvvvkmu3bt4qOPPuKnn36if//+GT5n+PDhfP3114waNYpt27YRExPD9OnTee211wBztsiqVavSo0cPNm3axIoVKxg2bFiG+3z++ec5f/48Dz/8MFFRUezevZtvvvnGfol0+fLl2bx5Mzt37uTUqVOWg9zs/HmIiIhzhYWF0b17d95///1U21u1asXJkyd588032bt3Lx999BHz5s3LsuN+9NFH/PLLL+zYsYO+ffty9uzZVANUd3d3evbsydChQ6lSpUqmt8WAufTNk08+yfbt2/n9998ZMWIEzz//fIbZ1LdvX86cOcMjjzzCunXr2Lt3LwsWLOCJJ54gOTkZf39/nnzySQYPHsySJUvYunUrPXv2zHCfERERtGzZki5duvDHH3+wf/9+5s2bx/z58wEza+Pi4li8eDGnTp3i4sWLafbRtm1b+88mOjqatWvX8vjjjxMREZHmNiOR7Ka/7iRPeeqpp/j888+ZOnUqYWFhREREMG3atBv65DU5OZm+ffsSGhpKhw4dqFq1qn25nVKlSvH777+zdu1aateuTZ8+fXjyySftg7hb4evry4IFCzhz5gzh4eE88MADtGnThg8//DBVv4iICJKTk+2DVzc3N1q2bInNZsv0fleAl156iaioKOrWrcvYsWN599137VP0p6d9+/b89ttvLFy4kPDwcBo3bsykSZMoV66cvYZffvmFS5cu0bBhQ5566in7TMTpKVy4MEuWLCEuLo6IiAjq16/PZ599Zr/s6Omnn6ZatWo0aNCAokWLsmrVqjT7yM6fh4iION/o0aPTXGoaGhrKxx9/zEcffUTt2rVZu3at5ay4N2vChAlMmDCB2rVrs3LlSmbPnk2RIkVS9XnyySdJSEjgiSeecGifbdq0oUqVKrRs2ZKHHnqIjh07ZrpMW8mSJVm1ahXJycnccccdhIWFMWDAAIKCguwD1LfeeosWLVpw77330rZtW5o3b57pPBs///wz4eHhPPLII9SoUYOXX37Z/mlr06ZN6dOnDw899BBFixblzTffTPN8m83GrFmzCA4OpmXLlrRt25aKFSsyY8YMh94LkaxkM66/iUBE8qzy5cszYMAABgwYkNOliIiI5KgDBw5QoUIFNmzYkGYd2eutWLGCNm3acOjQIfvVUOnp2bMnsbGx/Prrr1lXrIgAmrBJRERERMTSlStXOHnyJCNHjuTBBx/MdOAqItlLlw2LiIiIiFj44YcfKFeuHLGxsZaX1IqIc+myYREREREREXF5+uRVREREREREXF6uuuf13LlzOV2CiIjkUYGBgTldQq6k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Lk+DVxEREREREXF5GryKiIiIiIiIy9PgVcQBNpuNX3/9NVuPsXPnTkJCQrhw4UK2HsdVXLx4kS5duhAQEIDNZiM2Ntay35AhQ+jXr59zixMREZenbM56ymZxdRq8Sr538uRJnn32WcqWLYuXlxchISG0b9+eVatW2fscPXqUO++8M1vrGDp0KP369aNgwYIAXL58mZ49exIWFkaBAgXo3Lmz5fOWLVtGvXr18PLyonLlykybNi1Nn48++ojy5cvj7e1No0aNWLt2bar2y5cv07dvXwoXLoy/vz9dunTh+PHjWf0SU/nqq69YsWIFf/31F0ePHuXs2bPYbDY2btyYqt+gQYP46quv2LdvX7bWIyIirkPZrGwWsaLBq+R7Xbp0YcOGDXz11Vfs2rWL2bNn06pVK06fPm3vExISgpeXV7bVcPDgQX777Td69uxp35acnIyPjw8vvPACbdu2tXze/v37ufvuu7n99tvZuHEjAwYM4KmnnmLBggX2PjNmzODFF19kxIgRREdHU7t2bdq3b8+JEyfsfQYOHMicOXP46aefWL58OUeOHOH+++/PttcLsHfvXkJDQ7ntttsICQnBZrNZ9itSpAjt27dnypQp2VqPiIi4DmWzslnEkiGSj509e9YAjGXLlmXYDzB++eUXwzAMY8SIEQaQ5mvq1KmGYRhGcnKyMW7cOKN8+fKGt7e3UatWLeOnn37KcP9vvfWW0aBBg3Tbe/ToYXTq1CnN9pdfftmoWbNmqm0PPfSQ0b59e/vjhg0bGn379rU/Tk5ONkqWLGmMHz/eMAzDiI2NNTw8PFLVGBMTYwDG6tWr063po48+MipXrmx4eXkZxYoVM7p06WJvi4uLMx577DHDz8/PCAkJMd5++20jIiLC6N+/v2EYhhEREZHqvbv+8dVtV3311VdG6dKl061FRETyDmWzslkkPfrkVfI1f39//P39+fXXX7ly5YpDzxk0aBBHjx61f7399tv4+vrSoEEDAMaPH8/XX3/NJ598wrZt2xg4cCCPPvooy5cvT3efK1assD//RqxevTrNmd/27duzevVqABISEli/fn2qPm5ubrRt29beZ/369SQmJqbqU716dcqWLWvvc72oqCheeOEFRo8ezc6dO5k/fz4tW7a0tw8ePJjly5cza9YsFi5cyLJly4iOjra3z5w5k6effpomTZpw9OhR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\n",
      "text/plain": [
       "<Figure size 1152x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt_linear(X_train, Y_train, prediction_tf, prediction_np)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Neuron with Sigmoid activation\n",
    "The function implemented by a neuron/unit with a sigmoid activation is the same as in Course 1, logistic  regression:\n",
    "$$ f_{\\mathbf{w},b}(x^{(i)}) = g(\\mathbf{w}x^{(i)} + b) \\tag{2}$$\n",
    "where $$g(x) = sigmoid(x)$$ \n",
    "\n",
    "Let's set $w$ and $b$ to some known values and check the model.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": []
   },
   "source": [
    "### DataSet\n",
    "We'll use an example from Course 1, logistic regression."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = np.array([0., 1, 2, 3, 4, 5], dtype=np.float32).reshape(-1,1)  # 2-D Matrix\n",
    "Y_train = np.array([0,  0, 0, 1, 1, 1], dtype=np.float32).reshape(-1,1)  # 2-D Matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3., 4., 5.], dtype=float32)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pos = Y_train == 1\n",
    "neg = Y_train == 0\n",
    "X_train[pos]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x216 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pos = Y_train == 1\n",
    "neg = Y_train == 0\n",
    "\n",
    "fig,ax = plt.subplots(1,1,figsize=(4,3))\n",
    "ax.scatter(X_train[pos], Y_train[pos], marker='x', s=80, c = 'red', label=\"y=1\")\n",
    "ax.scatter(X_train[neg], Y_train[neg], marker='o', s=100, label=\"y=0\", facecolors='none', \n",
    "              edgecolors=dlc[\"dlblue\"],lw=3)\n",
    "\n",
    "ax.set_ylim(-0.08,1.1)\n",
    "ax.set_ylabel('y', fontsize=12)\n",
    "ax.set_xlabel('x', fontsize=12)\n",
    "ax.set_title('one variable plot')\n",
    "ax.legend(fontsize=12)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Logistic Neuron\n",
    "We can implement a 'logistic neuron' by adding a sigmoid activation. The function of the neuron is then described by (2) above.   \n",
    "This section will create a Tensorflow Model that contains our logistic layer to demonstrate an alternate method of creating models. Tensorflow is most often used to create multi-layer models. The [Sequential](https://keras.io/guides/sequential_model/) model is a convenient means of constructing these models."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "model = Sequential(\n",
    "    [\n",
    "        tf.keras.layers.Dense(1, input_dim=1,  activation = 'sigmoid', name='L1')\n",
    "    ]\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`model.summary()` shows the layers and number of parameters in the model. There is only one layer in this model and that layer has only one unit. The unit has two parameters, $w$ and $b$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " L1 (Dense)                  (None, 1)                 2         \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 2\n",
      "Trainable params: 2\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[-0.11]] [0.]\n",
      "(1, 1) (1,)\n"
     ]
    }
   ],
   "source": [
    "logistic_layer = model.get_layer('L1')\n",
    "w,b = logistic_layer.get_weights()\n",
    "print(w,b)\n",
    "print(w.shape,b.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's set the weight and bias to some known values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[array([[2.]], dtype=float32), array([-4.5], dtype=float32)]\n"
     ]
    }
   ],
   "source": [
    "set_w = np.array([[2]])\n",
    "set_b = np.array([-4.5])\n",
    "# set_weights takes a list of numpy arrays\n",
    "logistic_layer.set_weights([set_w, set_b])\n",
    "print(logistic_layer.get_weights())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's compare equation (2) to the layer output."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[0.01]]\n",
      "[[0.01]]\n"
     ]
    }
   ],
   "source": [
    "a1 = model.predict(X_train[0].reshape(1,1))\n",
    "print(a1)\n",
    "alog = sigmoidnp(np.dot(set_w,X_train[0].reshape(1,1)) + set_b)\n",
    "print(alog)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "They produce the same values!\n",
    "Now, we can use our logistic layer and NumPy model to make predictions on our training data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4wAAAEcCAYAAACMMzrIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABZFUlEQVR4nO3deXwT1foG8GfSla0tq6xlKQpSFCmylFLZWkBBEBRQQVkuiyAIlUWQiwheXH6KgrgBAl7lXlBEreBFoWVfZVGQVWVREAS0G4VuSc7vj9B00kzSpp1kJsnzvR8+t33ndHpSME9Pct4ZSQghQERERERERFSMQesJEBERERERkT5xwUhERERERESKuGAkIiIiIiIiRVwwEhERERERkSIuGImIiIiIiEgRF4xERERERESkiAtG8gurV69G69atUaVKFUiShMmTJwMAGjVqhEaNGmk6N2/z4osvQpIkbNu2rVznGT58OCRJwvnz51WZFxERkTdS63cRSZLQpUuXcp+HqDguGH2UJEku/fnoo4+0nrLb7N27F0OGDMH169cxbtw4zJkzB7169dJ6WqWybds2699R48aN4ei2qdnZ2QgLC7OO5SKMiMi3FT7fN2zYELm5uYpjGjVqBEmSYDQaPTw7/Sp8sVKSJLzwwgsOx/373/+2juMijPxdoNYTIPeYM2eOXW3hwoXIzMzEpEmTEBERYXPsnnvu8czENPDNN99ACIGPP/4YHTt21Ho6ZRIYGIjz589j8+bN6NGjh93xNWvW4Pr16wgMDOQvBkREfuT333/HwoULMWPGDK2n4lUCAwOxcuVKzJkzBwEBAXbHly1bxkwluoULRh/14osv2tU++ugjZGZmYvLkyX61DfPSpUsAgLp162o8k7JLSEjA1q1bsWzZMsUF47Jly1CnTh1ERkZi//79GsyQiIg8rWrVqpAkCa+++ipGjRqFGjVqaD0lr9GnTx989dVX+Pbbb9G7d2+bYydPnsTu3bvRv39/fPnllxrNkEg/uCWVAAD79+/HI488gtq1ayM4OBgNGjTA2LFjrYstuS5duli3uLz88su4/fbbERISggYNGuC5555Dfn6+3dfs3LkTDz74IOrXr4+QkBDUrl0bHTp0wNy5c+3GXr58GU8//TQaNWqE4OBg1KxZEwMGDMChQ4fsxn700UfWLbXffvstunTpgvDwcGtNkiSsXLkSANC4ceNSb9nMy8vDq6++irvuugsVK1ZEWFgY4uPj8dlnn9mMy87ORnBwMOLi4mzqOTk5CA0NhSRJ+OSTT2yOvf/++5AkCStWrHA6B7nq1atjwIABSE5OxrVr12yOHT16FN9//z1GjBiBwEDHrwGlpqaiV69eqFatGkJCQnDHHXdgxowZyMzMVBx/6NAh9OrVC1WqVEFYWBgSEhKwd+9ep/M8deoUhg8fjgYNGiA4OBi33XYbHn/8cZw+fbrUj5WIiEqnYsWKmD17NjIzMxXzVElhq4PSC8uAcj+dPGs3b96M+Ph4VK5cGTVr1sSIESOQkZEBAPjhhx/Qp08fVK1aFZUrV0bfvn0V87bw94i8vDz885//ROPGjRESEoKoqCjMnTvX5veI9PR0VKxYEVFRUQ7bMh588EFIkoSDBw+W6mcAAEOGDEGFChWwbNkyu2OFtVGjRjn8+tL+nlBICIF33nkH0dHRCA0NRb169TBhwgSHGVxo9erV6Nq1KyIiIhAaGoo777wT//rXv5CXl1fqx0pUboL8RsOGDQUAce7cOZv68uXLRUBAgKhYsaJ49NFHxbRp08RDDz0kDAaDqFOnjvjtt99sxnfu3FkAEAMHDhS1a9cWI0aMEJMmTRK33367ACCGDx9uM37jxo3CYDCIiIgI8eSTT4qZM2eKsWPHivvuu0/UqlXLZuzZs2dF3bp1BQDRrVs3MWPGDDFkyBARHBwsgoODxfr1623Gr1y5UgAQvXv3FgEBAaJPnz5i+vTpYvDgweKHH34Qc+bMEa1atRIAxKRJk8ScOXPEnDlzRHp6uvVn0rBhQ5tz5uXlWR9j8+bNxdSpU8X48eNFrVq1BAAxc+ZMm/FxcXEiMDBQZGVlWWubN28WAAQAMWzYMJvxDz/8sAAgzp8/7+yvSwghxNatWwUAMWTIELFlyxYBQLz++us2YyZMmCAkSRJnzpwRcXFxin/HH3zwgZAkSVSuXFmMGDFCPPfcc6J9+/YCgGjRooX151Fo9+7dokKFCiIgIEAMHDhQzJw5U9x///0iODhY9OrVSwAQW7dutfmajRs3igoVKojAwEDRv39/MW3aNPHYY4+JkJAQERYWJg4dOmQzftiwYYpzJSKikgEQ9erVE/n5+SIqKkoEBQWJn3/+2WZMYe4XFBRYa4W5MmfOHMXzKuViYdb2799fBAUFif79+4spU6aI2NhYAUB06dJF7N27V1SsWFH07NlTTJkyRfTo0UMAENHR0cJkMtmcrzBj+/btK+rUqSMmTpwonn32WREVFSUAiD59+giz2WwdP2LECAFAbNq0yW6+v//+uwgICBBt2rQp1c+tMHs2b94snnzySREYGCguX75sPZ6bmyuqV68uOnfuLH755RcBQHTu3NnmHK7+niCEEM8884wAYPd47733XlGnTh27n7n8cdevX1+MHDlSPPvss6Jjx47Wn7n871UIoThXIjVwwehHlBaMp0+fFkFBQSIqKkpcvHjRZnxKSoowGAzioYcesqkXPknGxMSIv//+21rPzs4WUVFRwmAw2Dz5DhgwQAAQP/74o92crl27ZvN5YcD861//sqnv3r1bBAQEiGrVqonr169b64UhJkmS2Lhxo+LjdrYwUQrGl19+WQAQ999/v82T8ZUrV6w/w927d1vrs2fPFgDEhg0brLUZM2aIgIAA0a1bN1G/fn1r3WQyiWrVqokmTZoozrU4+YLRbDaLpk2bimbNmlmP37x5U0RERIiEhAQhhFBcMJ4/f14EBweLKlWqiJMnT9qcf9y4cQKAGD16tLVmNptFs2bNBADx1Vdf2YxfuHChdSEsXzCmpaWJiIgIUb16dXH8+HGbr/npp59EpUqVROvWrW3qXDASEZVd4YJRCCHWrl1rXdDJqb1gDAgIENu2bbPWTSaTSEhIEABE1apVxapVq2y+buTIkYpZUvh7xO233y7S0tKs9ZycHNGhQwcBQHz88cfW+oEDBwQA8fDDD9vNd86cOQKAWLp0qeLjKU6+YNy5c6cAIF5++WXr8dWrVwsAYtWqVQ4XjK7+nrB7924BQERFRdn83iR/vM4W6Tdv3lR8zAsXLrSpc8FI7sItqX7u/fffR0FBARYtWoR69erZHOvevTv69u2L9evX4/r163Zf+9prr6FatWrWzytVqoQhQ4bAbDYrbgupUKGCXU3eb3Hx4kVs2rQJkZGRmD59us24jh074rHHHkNaWhq++OILu/P069dPtSufrlixApIk4c0337TZ4lmrVi3Mnj0bAPDhhx9a6927dwdg2fJZKDU1FW3atMGAAQNw8eJF/PzzzwCAH3/8EWlpadavcYUkSRg1ahROnz6NHTt2AAA+//xzZGRkYPTo0Q6/btWqVcjPz8eECRPQvHlzm2Pz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IYTQehJEevbDDz+gQ4cOSEpKwquvvoorV66gVatWaN++PZKTk7WeHhERkd9hNhN5DheMRKXw1ltvYerUqfjuu+/wxhtv4KeffsKRI0dQo0YNradGRETkl5jNRJ7BBSNRKQgh0Lt3b2zZsgX5+fnYvHkzunfvrvW0iIiI/Bazmcgz2MNIVAqSJOGJJ55AXl4eWrVqxUAiIiLSGLOZyDO4YCQqhT///BOTJk1CTEwMjhw5gkWLFmk9JSIiIr/GbCbyDC4YiUoghMCwYcMQEhKClJQUTJ48Gc899xyOHj2q9dSIiIj8ErOZyHPYw0hUggULFmD69OnYsmULOnfujPz8fHTo0AF5eXk4ePAgKlSooPUUiYiI/Aqzmchz+A4jkROHDx/G888/j5kzZ6Jz584AgODgYKxevRrnz5/Hs88+q/EMiYiI/Auzmciz+A4jERERERERKeI7jERERERERKSIC0YiIiIiIiJSxAUjERERERERKeKCkYiIiIiIiBRxwUhERERERESKuGAkIiIiIiIiRVwwEhERERERkSIuGImIiIiIiEgRF4xERERERESk6P8BwjqlVGMj2RYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1152x288 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt_logistic(X_train, Y_train, model, set_w, set_b, pos, neg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The shading above reflects the output of the sigmoid which varies from 0 to 1."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Congratulations!\n",
    "You built a very simple neural network and have explored the similarities of a neuron to the linear and logistic regression from Course 1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
